import oracle.jdbc.oracore.OracleType;

import java.sql.*;

/**
 * JDBC 第一课
 *     加载驱动、连接数据库、显示表中的数据
 *     从连接数据库（Connection开始连接）——>返回结果集（ResultSet）有3种方法
 */
public class Demo1 {
    public static void main(String[] args){
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");//加载纯Java驱动程序
            System.out.println("驱动加载成功！");
           // String url="jdbc:oracle:thin:@127.0.0.1:1521:xe";//127.0.0.1 代表本机IP地址，也可以换成自己的真实IP地址
            String url="jdbc:oracle:thin:@192.168.1.102:1521:xe";
            String user="hr";
            String pwd="123";
            Connection con= DriverManager.getConnection(url,user,pwd);//连接数据库
            System.out.println("连接成功！");
            /**
             * 一、createStatement 方法
             */
            Statement stm=con.createStatement();//创建游标
            String sql="Select * from employees";//选定表
            ResultSet rs=stm.executeQuery(sql);//创建结果集
            while (rs.next()){
                System.out.println(rs.getString(2)+"   "+rs.getInt("salary"));
            }
            System.out.println("-------------------------------");
            /**
             * 二、 PreparedStatement 方法
             */
            String sql1="select * from employees where salary>?AND department_id=?";
            PreparedStatement pstm=con.prepareStatement(sql1);
            pstm.setInt(1,10000);
            pstm.setInt(2,80);
            ResultSet rs1=pstm.executeQuery();
            while (rs1.next()){
                System.out.println(rs1.getString(2)+"    "+rs1.getInt("salary"));
            }
            System.out.println("-------------------");
            /**
             * 三、CallableStatement 方法：存储过程
             */
            String sql2="{call avg_salary(?)} ";//存储过程的调用用call
            CallableStatement cstm=con.prepareCall(sql2);
            double avg;
            cstm.registerOutParameter(1, OracleType.STYLE_DOUBLE);
            cstm.executeQuery();//执行
            avg=cstm.getDouble(1);
            System.out.println("平均工资："+avg);
            rs.close();stm.close();con.close();//顺序关闭
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("驱动加载失败！");
        } catch (SQLException e){
            e.printStackTrace();
        }

    }
}
